import tensorflow as tf

"""
    衰减学习率：
        learning_rate=learning_rate_base∗decay_rate(global_step/decay_steps)
    
    实现学习率的动态变化，当训练越多，就衰减学习率
    
"""
if __name__ == '__main__':

    learning_rate = 1e-4

    global_step = tf.Variable(0)

    decay_rate = 0.96

    decay_steps = 100

    # 公式： learning_rate=learning_rate_base∗decay_rate(global_step/decay_steps)
    # 参数： (基础学习率，当前迭代轮数，衰减速度（通常为过完一次所有训练数据需要的迭代次数），学习率衰减系数)
    decay_learning_rate = tf.train.exponential_decay(learning_rate, global_step, decay_steps, decay_rate)

    # 使用指数衰减的学习率。在minimize函数中传入global_step将自动更新global_step参数，从而使得学习率也得到相应更新。
    # train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(my_loss, global_step=global_step)

    with tf.Session() as session:
        session.run(tf.global_variables_initializer())
        print(session.run(decay_learning_rate))

        # 模拟 global_step 增加，每增加 decay_steps，衰减值为原来的 decay_rate
        session.run(tf.assign(global_step, 10001))
        print(session.run(decay_learning_rate))


